package com.gin.pixiv.api

import com.gin.pixiv.enums.CommentType
import com.gin.pixiv.enums.PixivStamp
import com.gin.pixiv.response.PixivResponse
import com.gin.pixiv.response.comment.CommentBody
import com.gin.pixiv.response.comment.PostCommentBody
import retrofit2.Call
import retrofit2.http.*

/**
 * 绘画作品的评论API
 * @author BX-Gin
 * @from 2024/2/24 13:24
 */
interface IllustCommentApi {
    /**
     * 查询根评论列表
     */
    @GET("ajax/illusts/comments/roots")
    fun getRoots(
        /**
         * 作品ID
         */
        @Query("illust_id") id: Long,
        /**
         * 偏移量，0为第一页，每次叠加一个 limit 到下一页
         */
        @Query("offset") offset: Int? = 0,
        /**
         * 每页上限
         */
        @Query("limit") limit: Int? = 50,
    ): Call<PixivResponse<CommentBody>>

    /**
     * 查询评论楼中楼
     */
    @GET("ajax/illusts/comments/replies")
    fun getReplies(
        /**
         * 根评论ID
         */
        @Query("comment_id") id: Long,
        /**
         * 页码
         */
        @Query("page") page: Int? = 1,
    ): Call<PixivResponse<CommentBody>>

    /**
     * 删除评论
     */
    @FormUrlEncoded
    @POST("rpc_delete_comment.php")
    fun postDelete(
        /**
         * 作品id
         */
        @Field("i_id") id: Long,
        /**
         * 评论id
         */
        @Field("del_id") commentId: Long,
    ): Call<PixivResponse<Void>>

    /**
     * 发布评论
     */
    @FormUrlEncoded
    @POST("rpc/post_comment.php")
    fun postAdd(
        /**
         * 评论类型
         */
        @Field("type") type: CommentType,
        /**
         * 作品ID
         */
        @Field("illust_id") id: Long,
        /**
         * 作品作者id
         */
        @Field("author_user_id") authorId: Long,
        /**
         * 父评论ID
         */
        @Field("parent_id") parentId: Long? = null,
        /**
         * 评论正文, 当 type 选择 comment 时填写
         */
        @Field("comment") content: String? = null,
        /**
         * 表情评论, 当 type 选择 stamp 时填写
         */
        @Field("stamp_id") stamp: PixivStamp? = null,
    ): Call<PixivResponse<PostCommentBody>>
}